package vista;

import java.awt.Graphics;
import java.awt.image.BufferedImage;

import modelo.AeroNave;
import modelo.Escenario;

import ar.uba.fi.algo3.titiritero.ObjetoVivo;
import ar.uba.fi.algo3.titiritero.SuperficieDeDibujo;
import ar.uba.fi.algo3.titiritero.vista.Imagen;

public abstract class VistaAeronave extends Imagen implements ObjetoVivo {
	protected String IMG = null;
	protected String IMG_SELECCIONADA = null;
	protected Imagen imagenSeleccionadaDefault;
	protected Imagen imagenNoSeleccionadaDefault;
	protected boolean estabaSeleccionada = false;

	Double angulo = 0D;

	public VistaAeronave() {
		this.imagenSeleccionadaDefault = new Imagen();
		this.imagenNoSeleccionadaDefault = new Imagen();
	}

	@Override
	public void vivir() {
		if (this.estaSeleccionado() && !estabaSeleccionada) {
			this.setNombreArchivoImagen(this.IMG_SELECCIONADA);
			rotarInicial();
			estabaSeleccionada = true;
		} else if (!this.estaSeleccionado() && estabaSeleccionada) {
			this.setNombreArchivoImagen(this.IMG);
			rotarInicial();
			estabaSeleccionada = false;
		}
	}

	protected boolean estaSeleccionado() {
		AeroNave nave = (AeroNave) this.getPosicionable();
		return nave.equals(Escenario.getInstance().getSeleccionada());
	}

	@Override
	public void dibujar(SuperficieDeDibujo superficeDeDibujo) {
		AeroNave nave = (AeroNave) this.getPosicionable();
		if (nave.estaAterrizado())
			return;
		rotar();
		Graphics grafico = (Graphics) superficeDeDibujo.getBuffer();
		grafico.drawImage(this.imagen, this.getPosicionable().getX(), this
				.getPosicionable().getY(), null);

	}

	private void rotarInicial() {
		AeroNave nave = (AeroNave) this.getPosicionable();
		this.angulo = nave.getVelocidad().getAngulo();
		this.imagen = this.rotate(this.imagen, this.angulo);
	}

	private BufferedImage getImagenDefault() {
		if (this.estaSeleccionado())
			return this.imagenSeleccionadaDefault.getImagen();
		return this.imagenNoSeleccionadaDefault.getImagen();
	}

	private void rotar() {
		AeroNave nave = (AeroNave) this.getPosicionable();
		Double nuevoAngulo = nave.getVelocidad().getAngulo();
		Double diferencia = this.angulo - nuevoAngulo;
		this.angulo = nuevoAngulo;
		if (Math.abs(diferencia) > 0.00001D) {
			this.imagen = this.rotate(getImagenDefault(), this.angulo);
		}
	}

}
